import tensorflow as tf

#每个样本的输入与输出的维度
input_node=784  
output_node=10
layer1_node=500

def get_weight(shape,regularizer):
    #将w的L2正则化加入到列表losses
    #正则化就是给每个参数w加上权重
    w=tf.Variable(tf.truncated_normal(shape,stddev=0.1)) #给出w的初始值
    if regularizer != None:
        tf.add_to_collection("losses",tf.contrib.layers.l2_regularizer(regularizer)(w))
    return w    



def get_bais(shape):
    #偏置b，除输入层外，每个接受输入的神经元都有一个偏置
    b=tf.Variable(tf.zeros(shape))
    return b



def forward(x,regularizer):
    #tf.nn module 有各种激活函数
    #权重w个数=输入节点个数*输出节点个数
    #张量形状 w1=[784,500] 表示784个500维的元素
    w1=get_weight([input_node,layer1_node],regularizer)  
    b1=get_bais([layer1_node])
    y1=tf.nn.relu(tf.matmul(x,w1)+b1)
    w2=get_weight([layer1_node,output_node],regularizer)
    b2=get_bais([output_node])
    #输出没有使用激活函数,输出shape为200*10
    y=tf.matmul(y1,w2)+b2      
    return y
